[レポート]ゼロ特権操作: データにアクセスせずにサービスを実行する #SEC327 #reinvent
こんにちは、臼田です。
みなさん、re:Invent楽しんでますか?(挨拶
今回は下記セッションのレポートです。
[SEC327]Zero-privilege operations: Running services without access to data
AWS works with organizations and regulators to host some of the most sensitive workloads in industry and government. In this session, learn how AWS secures data, even from trusted AWS operators and services. Explore the AWS Nitro System and how it provides confidential computing and a trusted runtime environment, and dive deep into the cryptographic chains of custody that are built into AWS Identity and Access Management (IAM). Finally, hear how encryption is used to provide defense in depth and why we focus on verified isolation and customer transparency at AWS.
AWS は組織や規制当局と協力して、業界や政府で最も機密性の高いワークロードをホストしています。 このセッションでは、信頼できる AWS オペレーターやサービスからも、AWS がデータを保護する方法を学びます。 AWS Nitro System と、それがコンフィデンシャル コンピューティングと信頼できるランタイム環境を提供する方法を調べ、AWS Identity and Access Management (IAM) に組み込まれている暗号化管理チェーンを深く掘り下げます。 最後に、暗号化を使用して多層防御を提供する方法と、AWS で検証済みの分離と顧客の透明性に重点を置いている理由について説明します。
Colm MacCarthaigh, VP / Distinguished Engineer, Amazon Web Services
レポート
コンピューター科学者: Jerry Saltzerの言葉。最小権限の話。
Every program and every user of the system should operate using the least set of privileges necessary to complete the job.
システムのすべてのプログラムとすべてのユーザーは、ジョブを完了するために必要な最小限の特権セットを使用して操作する必要があります。
境界線防御は死にました。
クラウドでは詳細な権限管理が可能で、幅広く暗号化を適用できます。
Zero-privilege operationsは必要なアクセス権限をゼロにして人とシステムのアクセスを制限します。これにより低いコストでセキュリティを実現します。
例えばAWSサポートはEC2やデータにアクセスできません。もしアクセスさせたいなら明示的なアクセス付与が必要です。プロフェッショナルサービスに対してログなどにアクセスさせたい場合も同様です。
EC2の開発者やオペレーターもEC2 Nitroインスタンスのメモリにはアクセスできない。
顧客のデータはAWSにとっては触りたくないものです。そのため、直接触ることができないように隔離します。
セキュリティのチェックリストを使うなど、コンプライアンス維持は大変です。AWSはこれをサポートします。
このトークには、いくつかの映画プロットの脅威モデルが含まれています。
こちらも参照してください。
データをどのように管理していくかが大事。最小権限を意識したり隔離したり。
とにかく多層防御を入れていく。運用上のミスやバグがあっても保護できるようにする。
最小権限の原則に従う。
- 必要でない限り、アクセスを許可しないでください
- 必要なときだけアクセスを許可する
- 必要であることを証明する
どうすれば何かを成し遂げられるでしょうか?
- 測定する
- 運転する
- 必要に応じてコース修正
どうやって測定していくか。すべてを同じようにやる必要はない。
ゼロ特権操作をやっていくためには5つのジャーニーがある。
1つ目は基本原則
まずは最小権限の原則に従うこと。面倒でもやっていく。常に顧客が何をしたいのかを問い続ける必要がある。
データを細かく識別し、アクセスを制御します。
より細かくやっていくには自動化する必要があります。データセットを探したり、ラベリングをしていきます。例えばAmazon ComprehendはPIIなどを識別できます。
こんな感じで使えます。
2つ目にエレメンタル保護。
物理ストレージやネットワークを保護する。バックアップやMFAもやっていく
多層防御の暗号化をする。AWSはすべてのネットワークをAESで暗号化している。
保管時の暗号化をし、バックアップやIdentityの管理を行う。
3つ目は常にアカウンタビリティをONにする。
CloudTrailとかを利用する。
すべてのアクセスをベースラインに従わせる。誰がアクセスしていいのか、常にレビューする。
一時的なアクセスを利用し、ロギングする。マシンも人も。
アクセスの仕組みをトレースして、
とにかくいろんなサービスで証跡をとる。
データイベントも必要。CloudTrailは使っていてもデータイベントは取っていないことが多いのでは?
データイベントまで収集する。
AWSの内部もSIGv4を利用しリングフェンシングしている。
カスタマーに対しても透過的に説明する必要がある。顧客はアクセスを追跡できるし、それを取り消すこともできる。
マネージドポリシーもチェックして監査できる。
アクセス権はIAM Access Analyzerを利用して簡単にチェックできる。
これが私の一番お気に入りのサービスです。誰がアクセスできるのかをチェックできます。
S3も同様に確認できます。
ここまでの3つは基本的なところです。すべてやるべきです。
あと2つはより強化していくステップです。
4つ目は条件付き認可
単一障害点をなくし、アクセスはより具体的な条件をつけていきます。
AWSではSIGv4を利用している。
これは非常に強力なアクセスコントロールを提供する。
すべてのリクエスト毎に署名する。
IAMでは代理アクセスを扱い追跡できる。
IAMはELBにセッションを渡し利用する。
他にもEC2からEBSへのアクセスを渡して暗号化鍵を利用するなど。
標準的なものは事前チェックをオートメーションし、標準じゃないものも複数人のチェックを利用して予想外な状況でも対応できるようにします。
5つ目はHermetic systems
ものすごく強いストロングスタイルをゲットしたいなら実践してくれ。
完全にルートのアクセスを無くす。AWS Nitro Systemでこれを実現する。人のアクセスや強制的なNorth-South通信なども無くす。すべてのアクセスをAPI経由にし、分離する。
AWS Nitro systemはNitro Cardsとハードウェアを分離しお客様の通信を隔離する。CMPやMemoryも隔離する。
準同型暗号を利用する。
暗号化に対するサイドチャネル攻撃の例の1つ。追加があるとその追加が判明してしまうと良くない。
使用中のデータの暗号化では変更が明らかになり、認証されていない。サイドチャネルの脅威にさらされる。Nitro systemでもメモリの暗号化を行うがあくまで2次的なもの。
Nitro Systemは顧客間も強力に分離する。
Nitro Systemはすべてを分離する。
運用上のアクセスはなくすべてAPI経由。
CPUコアやL1/L2キャッシュも分離します。
AWS Nitro Enclavesは分離した計算領域を提供する。ネットワークのアクセスはなくすべてAPI経由。
エージェントは暗号化されたメッセージのみをやり取りし、平文を認識しない。
このNitro Enclavesを使って暗号証明が可能。例えばソフトウェアコードの完全な証明に利用できる。
キーペアを作成し署名に活用する。
証明ドキュメントを作成してAWS Nitro Attestation PKIによって署名することでこれを利用できる。KMSやサードパーティでも。
詳しくはこちらにホワイトペーパーがあります。
最後におさらい。
- パーミッションとアクセス権を徐々に下げることは、ニューノーマルです
- 自動化と運用の改善と連携します
- CloudTrailとMFAを使いましょう
- このセッションの特に前半3つのZero-privilege operationsのジャーニーは実施しましょう
- Hermetic systemsは現実的になっているので取り組みましょう
感想
非常に広範囲に渡る内容でした。
基本的なところは当然実践していきながら、AWSのようにデータに触れないセキュリティを実現していきたいですね。